package com.vito.oa.act.service;

import java.util.List;
import java.util.Map;

import com.vito.base.authoriza.model.RoleModel;

/**
 * 自定义流程审批人
 * 
 * @author xuezhennan
 *
 */
public interface OaActApproverServer {
	/**
	 * 判断是否设置有非分条件审批人
	 * 
	 * @param processKey
	 * @param topDeptId
	 * @return
	 */
	public int queryDefinedApproversCount(String processKey, String topDeptId);

	/**
	 * 判断是否设置有分条件审批人
	 * 
	 * @param processKey
	 * @param topDeptId
	 * @return
	 */
	public int queryBranchCount(String processKey, String topDeptId);

	/**
	 * 查询流程非条件审批人
	 * 
	 * @param key
	 *            流程key
	 * @param userId
	 *            发起人id
	 * @param deptId
	 *            发起人部门id
	 * @param companyId
	 *            发起人企业id
	 * @return 设置的审核人规则
	 */
	public Map<String, Object> queryDefinedApprovers(String key, String userId, String deptId, String companyId);

	/**
	 * 查询流程分条件审批人
	 * 
	 * @param key
	 *            流程key
	 * @param userId
	 *            发起人id
	 * @param deptId
	 *            发起人部门id
	 * @param companyId
	 *            发起人企业id
	 * @param branchId
	 *            条件分支id
	 * @return 设置的分条件审核人规则
	 */
	public Map<String, Object> queryDefinedApprovers(String key, String userId, String deptId, String companyId,
			String branchId);

	/**
	 * 根据条件值查询符合该值的条件分支
	 * 
	 * @param processKey
	 *            流程key
	 * @param topDeptId
	 *            顶级部门ID
	 * @param des
	 *            条件值
	 * @return 分支ID
	 */
	public String queryProcessBranch(String processKey, String topDeptId, String des);

	/**
	 * 查询企业对流程设置的所有条件
	 * 
	 * @param processKey
	 * @param topDeptId
	 * @return 所有条件
	 */
	public List<Map<String, String>> queryProcessBranchList(String processKey, String topDeptId);

	/**
	 * 查询职务（角色）
	 * 
	 * @param param
	 * @return
	 */
	List<RoleModel> queryRoleByDept(Map<String, Object> param);

	/**
	 * 查询流程所有节点及其相关信息
	 * 
	 * @param processKey
	 * @companyId 企业ID
	 * @return
	 */
	public List<Map<String, String>> queryProcessAllNode(String processKey,String companyId);

	/**
	 * 根据当前节点查询下一级节点
	 * 
	 * @param processKey
	 * @param currentNodeId
	 * @return
	 */
	public Map<String, String> queryNextNode(String processKey, String currentNodeId);

}